Replication Controller 是在k8s上負責管理 pod 數量和狀態的 controller,我們可以利用他來做到以下幾件事:
接下來就來講講 Replication Controller 的設定檔要怎麼寫
阿不是要寫controller的嗎?
因為他跟pod的設定檔滿像的,所以就..一起寫
以下是一個簡單的 pod 設定檔
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
可以看見其中幾個比較重要的部分
apiVersion
:apiVersion 代表著目前 K8s 中該文件的核心版本號kind
:記錄這個YAML是給誰的metadata
:metadata 為 pod 的一些資料,作用跟html header中<meta>
的作用類似,有三個比較重要的 key
name
:指定pod的名稱labels
:pod的分群管理用,之後會寫道annotations
:類似於labels
,用來記錄使用者附加的自定義資訊specs
:specs
的作用則是定義 container 之用,內容跟 docker-compose.yml
作用類似,可以定義映像、容器名稱、對外埠口等等那麼像上面的 yaml檔,內容就是啟用一個pod,便在pod內的 container運行nginx的映像,並開啟80口對外接收服務。
在建立完 pod.yaml 之後,我們可以利用 kubectl create
的指令來在一個 development 中建立 pod:
kubectl create -f pod.yaml
接著可以用
kubevtl get pods
來檢視當前的 pod 狀態,當Status變成Running時,便啟動完成了
另外還有其他的指令,如 kubectl describe
便可以看到我們設置的 meta
資料、kubectl port-forward <podname> port:port
可以把 port forward出來等等,但今天重點不在那邊就改天再講吧
一樣從範例開始:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
我們可以看到上面的YAML檔一樣有著 apiVersion
、kind
、metadata
、和 spec
四個部分,他們的作用基本相同,kind
因為這個YAML是給Controller用得因此變成 replicationController
,最大不同點是在 spec
的部分,多了一些不同的 tag
replicas
、selector
:定義的 pod 數量、以及定義選擇的 pod 的條件 (依據 pod 的label
)template
:pod的模板,controller會依據這裡的資訊創建 pod
metadata
:作用和pod的YAML相同,但注意metadata 內的 labels 必須包含在 selector中
,不然會報錯 spec
:一樣總結上面的YAML檔,就是確保任一時候label=nginx的pod數量為3
最後一樣來到了deploy的部分,還是跟pod的YAML檔相同,使用的指令為kubectl create -f <YAML name>
可以利用 kubectl get pods
,就會看見我們創建的3個pod啦!